package main.java;

/**
 * @program: pratice
 * @author: 关键我是大怪
 * @create: 2021-09-08 12:04
 */

/**
 * 题目：
 * <p>
 * 给定两个 01 字符串 a 和 b ，请计算它们的和，并以二进制字符串的形式输出。
 * 输入为 非空 字符串且只包含数字 1 和 0。
 * <p>
 * 思路：对字符串从后往前运算，如正常的加法运算，该进位的进位，用一个StringBuilder拼接
 * 最后反转StringBuilder
 */

public class Test13_二进制加法 {
    public String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        int i = a.length() - 1;
        int j = b.length() - 1;

        //记录进位信息
        int c = 0;
        while (i >= 0 || j >= 0) {
            int di = i >= 0 ? a.charAt(i--) - '0' : 0;
            int dj = j >= 0 ? b.charAt(j--) - '0' : 0;
            int sum = c + di + dj;
            c = sum >= 2 ? 1 : 0;
            sum = sum >= 2 ? sum - 2 : sum;
            sb.append(sum);

        }
        if (c == 1) {
            sb.append(1);
        }

        return sb.reverse().toString();
    }

    public static void main(String[] args) {
        Test13_二进制加法 t = new Test13_二进制加法();
        String s = t.addBinary("11", "10");
        System.out.println(s);
    }

}
